/*
 * Copyright (c) 2018 安徽皖通科技股份有限公司 All rights reserved.
 */

package net.wantongtech.xa.uploadbasicinfo.util;

import com.wtkj.constant.NewClearingConstant;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 清分结算改造通用工具方法
 *
 * @author MaShibo
 * 日期 :  2018/10/25
 */
@Slf4j
public class ClearingCommonUtils {

    /**
     * 默认前缀
     */
    private static final String DEFAULT_PREFIX = "99999999";


    private ClearingCommonUtils() {
        throw new IllegalStateException("清分改造工具类无需初始化");
    }


    /**
     * 将新传输编码转换为老传输编码
     *
     * @param newTransferNo 新传输编码 ：发行方、高速服务方编码
     * @return 老的传输编码
     */
    public static String convert2OldTransferNo(String newTransferNo) {
        StringBuilder clearingNo = new StringBuilder(DEFAULT_PREFIX);
        clearingNo.append(newTransferNo);
        //发行方和高速收费服务方编码长度为6位，拓展服务方编码为7位
        clearingNo.insert(12, newTransferNo.length() == 6 ? "00" : "0");
        return clearingNo.toString();
    }

    /**
     * convert2NewTransferNo:将老传输编码改为新编码：服务方转换. <br/>
     *
     * @param @param  oldTransferNo
     * @param @return 参数
     * @return String 返回类型
     * @throws
     * @author wt1237 Yongda
     * @Title: convert2NewTransferNo
     */
    public static String convert2NewTransferNo(String oldTransferNo) {
        StringBuffer buffer = new StringBuffer(oldTransferNo.substring(8));
        buffer.delete(4, 6);
        return buffer.toString();
    }

    /**
     * 转换卡类型
     *
     * @param newCardType 新卡类型
     * @return 旧卡类型
     */
    public static Integer convertCardType(Integer newCardType) {
        if (newCardType == null) {
            return null;
        }
        return newCardType == NewClearingConstant.ETC_CARD_TYPE_DEBIT ?
                com.wtkj.vo.dzzf.share.staticvalue.CardStaticValue.EcardType.CARD_TYPE_CZ :
                com.wtkj.vo.dzzf.share.staticvalue.CardStaticValue.EcardType.CARD_TYPE_JZ;
    }


    /**
     * 单位转换：分转元
     *
     * @param fee 金额-分
     * @return 金额-元
     */
    public static BigDecimal unitConvert(Long fee) {
        return new BigDecimal(fee).divide(NewClearingConstant.ONE_HUNDERD, 2, RoundingMode.DOWN);
    }

    /**
     * 单位转换：元转分
     *
     * @param fee 金额-元
     * @return 金额-分
     */
    public static Long unitConvert(BigDecimal fee) {
        return fee.multiply(NewClearingConstant.ONE_HUNDERD).longValue();
    }


}
